package com.example.activiti7.domain.service;

import com.example.activiti7.domain.model.req.QueryHisTaskListReq;
import com.example.activiti7.domain.model.req.QueryTaskListReq;
import com.example.activiti7.domain.model.req.TaskBaseReq;
import com.example.activiti7.domain.model.req.TaskReq;
import com.example.activiti7.domain.model.resp.Page;
import com.example.activiti7.domain.model.resp.Response;
import com.example.activiti7.domain.model.vo.HistoricTaskVO;
import com.example.activiti7.domain.model.vo.TaskVO;
import org.activiti.engine.task.Task;

public interface ProcessTaskService {
    /**
     * 查询待办列表
     *
     * @param req 查询对象
     * @return
     */
    Response<Page<TaskVO, QueryTaskListReq>> queryTodoTasks(QueryTaskListReq req);

    /**
     * 查询已办列表
     *
     * @param req 查询对象
     * @return
     */
    Response<Page<HistoricTaskVO, QueryTaskListReq>> queryDoneTasks(QueryTaskListReq req);

    /**
     * 查询历史任务列表
     *
     * @param req 流程实例ID
     * @return
     */
    Response<Page<HistoricTaskVO, QueryHisTaskListReq>> queryHisTasks(QueryHisTaskListReq req);

    /**
     * 批复任务
     *
     * @param req 任务请求对象
     * @return
     */
    Response<Boolean> completeTask(TaskReq req);

    /**
     * 转办任务
     *
     * @param req 任务请求对象
     * @return
     */
    Response<Boolean> turnTask(TaskReq req);

    /**
     * 驳回任务
     *
     * @param req 任务请求对象
     * @return
     */
    Response<Boolean> rejectTask(TaskReq req);

    /**
     * 撤回任务
     *
     * @param req
     * @return
     */
    Response<Boolean> undoSubmitTask(TaskReq req);

    /**
     * 跳到最开始的任务节点（直接打回）
     *
     * @param task 当前任务
     */
    Response<Boolean> backToStartTask(Task task, String comment);

    /**
     * 结束/终止任务
     *
     * @param req 任务请求对象
     */
    Response<Boolean> terminateTask(TaskBaseReq req);
}
